package com.study.design.model.structPattern.composite;

import java.util.ArrayList;
import java.util.List;

/**
* @Name: Composite
* @Description: 容器组件：有容器特征，可以包含叶子节点。
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-2-11 上午10:58:04 
* @Version: V1.0
 */
public class Composite implements Component {
	
	//定义容器，用来存放该容器组件下的子节点
	private List<Component> list = new ArrayList<Component>() ;
	
	/**
	* @Name: add
	* @Description: 添加组件
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-2-11 上午11:00:08
	* @Parameters: @param component
	* @Return: void
	 */
	public void add(Component component) {
		list.add(component) ;
	}
	
	/**
	* @Name: remove
	* @Description: 移除组件
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-2-11 上午11:00:21
	* @Parameters: @param component
	* @Return: void
	 */
	public void remove(Component component) {
		list.remove(component) ;
	}
	
	/**
	* @Name: getChild
	* @Description: 获取子组件
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-2-11 上午11:00:29
	* @Parameters: @param index
	* @Parameters: @return
	* @Return: Component
	 */
	public Component getChild(int index) {
		return list.get(index) ;
	}

	@Override
	public void operate() {
		//递归调用容器的operate()方法
		for(Component child : list) {
			child.operate() ;
		}
	}

}
